SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE Procedure [dbo].[SP_TMDOCU_PROV_Q02]              
/*-------------------------------------------------------*/              
/*---Empresa              : OFISIS S.A.                --*/              
/*---Cliente              : OFISIS                     --*/              
/*---Sistema              : Tesoreria                  --*/              
/*---M©dulo               : Empresa                    --*/              
/*---Programa             : Registro COMPRAS           --*/              
/*---Script               : tmdocu.sql                 --*/              
/*---Nombre SP            : SP_TMDOCU_PROV_Q02         --*/              
/*---Desarrollado por     : Carlos Marquez Escobar     --*/              
/*---Fecha Creaci©n       : 19/09/2005                 --*/              
/*---Base Datos           : Microsoft Sql Server       --*/              
/*---Versi©n              : 8.0                        --*/              
/*---Invoca a SP          :                            --*/              
/*-------------------------------------------------------*/              
/*-------------------------------------------------------*/              
/*---Modificado 1 por     : Carlos Márquez Escobar     --*/              
/*---Fecha Modificaci©n   : 08/11/2005                 --*/               
/*---Detalle Modificaci©n : Nuevos Campos              --*/              
/*-------------------------------------------------------*/              
/*-------------------------------------------------------*/              
/*---Drop Proc SP_TMDOCU_PROV_Q02                      --*/              
/*---Grant Execute on SP_TMDOCU_PROV_Q02 to public         --*/               
/*---              
  Create Table #TWREGI_COMP_0001 (              
   NU_CORR_COMP  VarChar(20)  Null  )              
  Create Table #TWREGI_COMP_0002 (              
   CO_PROV  VarChar(20)  Null,              
   CO_TIPO_DOCU  VarChar(03)  Null,              
   NU_DOCU_PROV  VarChar(20)  Null,              
   NU_CORR_COMP  VarChar(20)  Null  )              
Create Table #TWREGI_COMP (              
 DE_TIPO_REPO  VarChar(20) Null,              
 CO_SUNA  VarChar(2)  Null,              
 FE_EMIS   DateTime  Null,              
 NU_CORR_COMP  VarChar(20) Null,              
 CO_TIPO_OPER  VarChar(03) Null,              
 CO_OPRC_CNTB  VarChar(03) Null,              
 DE_OPRC  VarChar(50) Null,              
 NU_ASTO  VarChar(10) Null,              
 CO_TIPO_DOCU  VarChar(3)  Null,              
 NU_DOCU_PROV  VarChar(20) Null,              
 CO_MONE  VarChar(3)  Null,              
 NU_RUCS  VarChar(20) Null,              
 NO_AUXI   VarChar(100) Null,              
 IB_BRUT_AFEC   Numeric(16,4)  Null,              
 IB_OPER_GRAV   Numeric(16,4)  Null,              
 IB_OPER_SCRF   Numeric(16,4)  Null,              
 IB_OPER_INAF   Numeric(16,4)  Null,              
 IB_SELE_CONS   Numeric(16,4)  Null,              
 IG_OPER_GRAV  Numeric(16,4)  Null,              
 IG_OPSE_GRAV   Numeric(16,4)  Null,              
 IG_OPSI_CRFI   Numeric(16,4)  Null,              
 IR_CUAR_CATE   Numeric(16,4)  Null,              
 IM_IESS    Numeric(16,4)  Null,              
 IM_TOTA   Numeric(16,4)  Null,              
 IM_AJUS   Numeric(16,4)  Null,              
 FA_TIPO_CAMB  Numeric(15,6)  Null,              
 FA_CAMB_EXTR  Numeric(15,6)  Null,              
 FA_CAMB  Numeric(15,6)  Null,              
 CO_IMP1   VarChar(03)  Null,              
 PC_IMP1   Numeric(9,4)  Null,              
 IM_IMP1   Numeric(16,4)  Null,              
 CO_IMP2   VarChar(03)  Null,              
 PC_IMP2   Numeric(9,4)  Null,              
 IM_IMP2   Numeric(16,4)  Null,              
 CO_IMP3   VarChar(03)  Null,              
 PC_IMP3   Numeric(9,4)  Null,              
              
 ST_SIGN   VarChar(1) Null,              
 CO_ESTA_DOCU  VarChar(3)  Null,              
 CO_SUNA_ORIG  VarChar(2)  Null,              
 NU_DOCU_ORIG  VarChar(20)  Null,              
 FE_DOCU_ORIG  DateTime  Null,              
 NU_DEPO_DETR  VarChar(20)  Null,        
 FE_  
DEPO_DETR  DateTime  Null,              
 NU_COMP_SERV  VarChar(20)  Null,              
 FL_RETE   VarChar(1)  Null  )              
SP_TMDOCU_PROV_Q02 '01', 'O'                
--*/              
/*-------------------------------------------------------*/              
 @ISCO_EMPR      TD_VC_002,               
 @ISTI_REPO      TD_VC_001              
--       
  
          
As              
DECLARE                
@VSCO_MONE_NACI  TD_VC_003,              
@VSCO_MONE_EXTR  TD_VC_003,              
@VSTI_CAMB   TD_VC_001,              
@VSTI_ORIG   TD_VC_001,              
@VSCO_TIAU_PROV  TD_VC_001,              
@VNIM_MAXI_NRET  TD_NU_016_004,              
@VNNU_REGI_ELIM  TD_IN_001              
              
Select @VSTI_CAMB = TI_CAMB, @VSTI_ORIG = TI_ORIG            From TTFACA_OPCI                    
Where CO_EMPR = @ISCO_EMPR                    
And CO_MODU = 'TEEM0001'                    
And CO_MENU = 'FTEEMBA'                    
                    
If ( @VSTI_CAMB Is Null Or @VSTI_ORIG Is Null )                  
 Select @VSTI_CAMB = TI_CAMB, @VSTI_ORIG = TI_ORIG,              
   @VSCO_MONE_NACI = CO_MONE_DEFA, @VSCO_MONE_EXTR = CO_MONE_EXTR,              
   @VSCO_TIAU_PROV = CO_TIAU_PROV,              
   @VNIM_MAXI_NRET = IM_MAXI_NRET              
 From TMPARA_TESO                    
 Where CO_EMPR = @ISCO_EMPR                    
Else                    
 Select @VSCO_MONE_NACI = CO_MONE_DEFA,               
   @VSCO_MONE_EXTR = CO_MONE_EXTR,              
   @VSCO_TIAU_PROV = CO_TIAU_PROV,              
   @VNIM_MAXI_NRET = IM_MAXI_NRET              
 From TMPARA_TESO                    
 Where CO_EMPR = @ISCO_EMPR              
              
              
if @ISTI_REPO = 'O'              
Begin ---Inicio Reporte O F I C I A L ---              
 Insert Into #TWREGI_COMP              
 (DE_TIPO_REPO, CO_SUNA,   FE_EMIS,   NU_CORR_COMP,  CO_TIPO_OPER, NU_ASTO,   NU_DOCU_PROV,  NU_RUCS,   NO_AUXI,              
  CO_TIPO_DOCU, CO_MONE,   IB_BRUT_AFEC ,  IB_OPER_GRAV ,  IB_OPER_SCRF, IB_OPER_INAF ,IB_SELE_CONS,  IG_OPER_GRAV,  
IG_OPSE_GRAV ,             
  IG_OPSI_CRFI ,IR_CUAR_CATE ,  IM_IESS ,    IM_TOTA,     FA_TIPO_CAMB, FA_CAMB_EXTR, CO_IMP1,   PC_IMP1,     CO_IMP2,        
     
  PC_IMP2,    CO_IMP3,   PC_IMP3,    ST_SIGN,   CO_ESTA_DOCU, CO_SUNA_ORIG, NU_DOCU_ORIG,   FE_DOCU_ORIG,  NU_DEPO_DETR,      
       
  FE_DEPO_DETR, NU_COMP_SERV,  FL_RETE,   FE_ULTI_PAGO, NO_DOCU)              
 Select                 
  'REG_COMPRAS' As TIPO, T3.CO_SUNA As CODIGO_SUNAT, TMDOCU_PROV.FE_EMIS As FECHA_EMISION,              
  TMDOCU_PROV.NU_CORR_COMP As CORRELATIVO, TMDOCU_PROV.CO_TIPO_OPER As CO_TIPO_OPER, TMDOCU_PROV.NU_ASTO As NRO_ASIENTO,  
TMDOCU_PROV.NU_DOCU_PROV As NUMERO_DOCUMENTO,              
  T2.NU_RUCS As RUC_PROVEEDOR, T2.NO_AUXI As NOMB_PROV,              
  TMDOCU_PROV.CO_TIPO_DOCU, TMDOCU_PROV.CO_MONE As MONE,              
  ---B1.---    
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN                 
  Case                   
   When T3.ST_DOCU_0027 = 'S' Then                  
    Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,                  
    TMDOCU_PROV.IM_BRUT_AFEC, @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2)  
        
   When T3.ST_DOCU_0026 = 'S' Then 0.00                  
   When T3.ST_DOCU_0023 = 'S' Or T3.ST_DOCU_0024 = 'S' Then 0.00                   
   Else                   
    Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,                  
    TMDOCU_PROV.IM_BRUT_AFEC -                   
    IsNull(TMDOCU_PROV.IM_SCRF,0) +                  
    PatIndex(TMDOCU_PROV.ST_AFEC_GAFI, 'S') * TMDOCU_PROV.IM_GAFI -                   
    (TMDOCU_PROV.IM_DCT1 + TMDOCU_PROV.IM_DCT2),                   
    @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2)                   
  End 
ELSE 0.00
END As IB_BRUT_AFEC,                  
  ---B2.---
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN                  
  Case                   
   When T3.ST_DOCU_0026 = 'S' Then 0.00   
   When T3.ST_DOCU_0027 = 'S' Then 0.00                  
   When T3.ST_DOCU_0023 = 'S' Or T3.ST_DOCU_0024 = 'S' Then 0.00                  
   Else Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,                  
    IsNull(TMDOCU_PROV.IM_SCRF,0),                   
    @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2)                  
  End 
ELSE 0.00
END  As IB_OPER_GRAV,                 
  ---B3.---   
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN               
  Case                   
   When T3.ST_DOCU_0026 = 'S' Then   
    Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,                  
    IsNull(TMDOCU_PROV.IM_BRUT_AFEC,0),                   
    @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2)                   
   When T3.ST_DOCU_0027 = 'S' Then 0.00                  
   When T3.ST_DOCU_0023 = 'S' Or T3.ST_DOCU_0024 = 'S' Then                  
    Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,                  
    IsNull(TMDOCU_PROV.IM_BRUT_AFEC,0),                   
    @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2)                  
   Else 0.00                  
  End 
ELSE 0.00
END As IB_OPER_SCRF,                  
  ---B4.---                  
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN  
  Case             
   When T3.ST_DOCU_0026 = 'S' Then 0.00          
   When T3.ST_DOCU_0028 = 'S' Then         
    Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,                  
    IsNull(TMDOCU_PROV.IM_BRUT_INAF,0),                   
    @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2)           
   When T3.ST_DOCU_0027 = 'S' Then 0.00                             
   When T3.ST_DOCU_0023 = 'S' Or T3.ST_DOCU_0024 = 'S' Then 0.00                  
   Else                   
    Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,                  
    TMDOCU_PROV.IM_BRUT_INAF +                   
    PatIndex(TMDOCU_PROV.ST_AFEC_GAFI, 'N') * TMDOCU_PROV.IM_GAFI +                   
    PatIndex(TMDOCU_PROV.ST_AFEC_FLET, 'N') * TMDOCU_PROV.IM_FLET +                   
    PatIndex(TMDOCU_PROV.ST_AFEC_MORA, 'N') * TMDOCU_PROV.IM_MORA,                   
    @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2)                  
  End 
ELSE 0.00
END As IB_OPER_INAF,                  
  ---B5.---                  
     0.00 As IB_SELE_CONS,                  
  ---I.1---  
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN  
  Case                   
   When T3.ST_DOCU_0027 = 'S' Then                  
    Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,                  
    IsNull(TMDOCU_PROV.IM_IMP1,0),                   
    @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2)                  
   When T3.ST_DOCU_0026 = 'S' Then 0.00                  
   When T3.ST_DOCU_0023 = 'S' Or T3.ST_DOCU_0024 = 'S' Then 0.00                   
   Else     ISNULL((              
    Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,                  
    (( TMDOCU_PROV.IM_IMP1 * PATINDEX( SUBSTRING( IsNull( TMDOCU_PROV.CO_IMP1, '0'), 1, 2), 'IG' ) ) +                  
    (  TMDOCU_PROV.IM_IMP2 * PATINDEX( SUBSTRING( IsNull( TMDOCU_PROV.CO_IMP2, '0'), 1, 2), 'IG' ) ) +                  
    (  TMDOCU_PROV.IM_IMP3 * PATINDEX( SUBSTRING( IsNull( TMDOCU_PROV.CO_IMP3, '0'), 1, 2), 'IG' ) ) ),                   
    @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2) ),0)                  
  End  
ELSE 0.00
END As IG_OPER_GRAV,                
  ---I.2--- 
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN  
  Case                   
   When T3.ST_DOCU_0026 = 'S' Then 0.00                  
   When T3.ST_DOCU_0027 = 'S' Then 0.00                  
   When T3.ST_DOCU_0023 = 'S' Or T3.ST_DOCU_0024 = 'S' Then 0.00                   
   Else    ISNULL((              
    Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,       
            
    ( ( TMDOCU_PROV.IM_SCF1 * PATINDEX( SUBSTRING( IsNull( TMDOCU_PROV.CO_IMP1, '0'), 1, 2), 'IG' ) ) +                  
     ( TMDOCU_PROV.IM_SCF2 * PATINDEX( SUBSTRING( IsNull( TMDOCU_PROV.CO_IMP2, '0'), 1, 2), 'IG' ) ) +                  
     ( TMDOCU_PROV.IM_SCF3 * PATINDEX( SUBSTRING( IsNull( TMDOCU_PROV.CO_IMP3, '0'), 1, 2), 'IG' ) ) ),                   
    @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2)),0)                
  End 
ELSE 0.00
END As IG_OPSE_GRAV,                  
  ---I.3--- 
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN  
  Case                           
   When T3.ST_DOCU_0026 = 'S' Then     
   ABS(Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,  
   (SELECT TDDISP_CCOS.IM_DIST   
  FROM   TDDISP_CCOS   
  WHERE  TDDISP_CCOS.CO_EMPR = TMDOCU_PROV.CO_EMPR  
 AND    TDDISP_CCOS.CO_PROV = TMDOCU_PROV.CO_PROV  
  AND    TDDISP_CCOS.CO_TIPO_DOCU = TMDOCU_PROV.CO_TIPO_DOCU  
  AND    TDDISP_CCOS.NU_DOCU_PROV = TMDOCU_PROV.NU_DOCU_PROV  
  AND    TDDISP_CCOS.CO_CNTA_EMPR = '401201'),   
 @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR , TMDOCU_PROV.FA_TIPO_CAMB), 2))           
   Else 0.00                   
  End 
ELSE 0.00
END IG_OPSI_CRFI,                  
                   
  0.00 As IR_CUAR_CATE,                  
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN  
    Case                   
   When T3.ST_DOCU_0026 = 'S' Then                  
    Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,                  
    ( TMDOCU_PROV.IM_IMP1 * PATINDEX( SUBSTRING( IsNull( TMDOCU_PROV.CO_IMP1, '0'), 1, 2), 'ND' ) ),                   
    @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2)                         
   Else    0.00                 
  End  
ELSE 0.00
END As IM_IESS,                  
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN  
  Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,                  
  TMDOCU_PROV.IM_TOTA,                   
  @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2) 
ELSE 0.00
END As IM_TOTA,                 
  TMDOCU_PROV.FA_TIPO_CAMB, TMDOCU_PROV.FA_CAMB_EXTR,                   
  TMDOCU_PROV.CO_IMP1, TMDOCU_PROV.PC_IMP1,                  
  TMDOCU_PROV.CO_IMP2, TMDOCU_PROV.PC_IMP2,                  
  TMDOCU_PROV.CO_IMP3, TMDOCU_PROV.PC_IMP3,                  
                   
  T3.ST_SIGN As SIGNO,                  
                   
  TMDOCU_PROV.CO_ESTA_DOCU As ESTADO,                  
  T5.CO_SUNA, TMDOCU_PROV.NU_DOCU_ORIG, TMDOCU_PROV.FE_DOCU_ORIG,                   
  TMDOCU_PROV.NU_DEPO_DETR As COMPROBANTE, TMDOCU_PROV.FE_DEPO_DETR As FE_DEPO_DETRACCION,                   
  TMDOCU_PROV.NU_COMP_SERV,                  
  DBO.FU_RETE_FLAG( TMDOCU_PROV.CO_EMPR, T2.ST_RETE, T2.ST_BCON, T3.ST_RETE,  TMDOCU_PROV.FE_EMIS,  @VNIM_MAXI_NRET, 
TMDOCU_PROV.IM_IMP1, T3.ST_DOCU_0004,                  
  dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI,TMDOCU_PROV.FE_EMIS, TMDOCU_PROV.IM_TOTA, @VSTI_CAMB, 
@VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR,                  
  TMDOCU_PROV.FA_TIPO_CAMB))  'RETENCION' ,               
 (CASE                  
  When  TMDOCU_PROV.CO_TIPO_DOCU IN (Select TI_DOCU_PROV From #TWTIPO_DOCU) THEN                  
  DBO.FU_FECH_PAGO( @ISCO_EMPR, TMDOCU_PROV.CO_PROV,  TMDOCU_PROV.CO_TIPO_DOCU, TMDOCU_PROV.NU_DOCU_PROV, TMDOCU_PROV.FE_VENC 
)                  
  Else                  
  NULL                  
   END) 'FE_VENC', T3.NO_DOCU
 From  TMDOCU_PROV            
 Left Outer Join TTDOCU_CNTB T5             
 On TMDOCU_PROV.TI_DOCU_ORIG = T5.TI_DOCU, TMAUXI_EMPR T2, TTDOCU_CNTB T3              
 Where  TMDOCU_PROV.CO_EMPR  = @ISCO_EMPR              
     And T2.CO_EMPR = TMDOCU_PROV.CO_EMPR              
     And T2.TI_AUXI_EMPR = @VSCO_TIAU_PROV              
     And T2.CO_AUXI_EMPR = TMDOCU_PROV.CO_PROV              
     And T3.TI_DOCU = TMDOCU_PROV.CO_TIPO_DOCU              
     And T3.ST_DOCU_0010 = 'N'              
     And T3.ST_REGI_COMP = 'S'              
 -- And T5.TI_DOCU =* TMDOCU_PROV.TI_DOCU_ORIG              
     And Exists ( Select #TWREGI_COMP_0002.NU_CORR_COMP              
      From #TWREGI_COMP_0002              
      Where               
      #TWREGI_COMP_0002.CO_PROV = TMDOCU_PROV.CO_PROV And              
      #TWREGI_COMP_0002.CO_TIPO_DOCU = TMDOCU_PROV.CO_TIPO_DOCU And              
      #TWREGI_COMP_0002.NU_DOCU_PROV = TMDOCU_PROV.NU_DOCU_PROV              
     )              
 Union All              
 Select                 
  'REG_RECxHON' As TIPO, T3.CO_SUNA As CODIGO_SUNAT, TMDOCU_PROV.FE_EMIS As FECHA_EMISION,              
  TMDOCU_PROV.NU_CORR_COMP As CORRELATIVO, TMDOCU_PROV.CO_TIPO_OPER As CO_TIPO_OPER, TMDOCU_PROV.NU_ASTO As NRO_ASIENTO,  
TMDOCU_PROV.NU_DOCU_PROV As NUMERO_DOCUMENTO,              
  T2.NU_RUCS As RUC_PROVEEDOR, T2.NO_AUXI As NOMB_PROV,              
  TMDOCU_PROV.CO_TIPO_DOCU, TMDOCU_PROV.CO_MONE As MONE,              
  ---B1.---              
  0.00 As IB_BRUT_AFEC,              
  ---B2.---              
  0.00 As IB_OPER_GRAV,              
  ---B3.---              
  0.00 As IB_OPER_SCRF,              
  ---B4.---              
  0.00 As IB_OPER_INAF,              
    ---B5.---  
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN            
  Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,        
   TMDOCU_PROV.IM_BRUT_AFEC + TMDOCU_PROV.IM_GAFI - TMDOCU_PROV.IM_DCT1 - TMDOCU_PROV.IM_DCT2,        
   @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2) 
ELSE 0.00
END As IB_SELE_CON1,  
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN            
  Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, 'SOL', TMDOCU_PROV.FE_EMIS,        
   TMDOCU_PROV.IM_BRUT_INAF + TMDOCU_PROV.IM_GAFI - TMDOCU_PROV.IM_DCT1 - TMDOCU_PROV.IM_DCT2,        
   'C', 'O', 'S', 'SOL', 'DOL', TMDOCU_PROV.FA_TIPO_CAMB), 2)  
ELSE 0.00
END As IB_SELE_CON2,       
  /*  
  ---I.1---        
  0.00 As IG_OPER_GRAV,   
  */        
  ---I.2---               
  0.00 As IG_OPSE_GRAV,              
  ---I.3---               
  0.00 As IG_OPSI_CRFI,              
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN               
  Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,              
  (( TMDOCU_PROV.IM_IMP1 * PATINDEX( SUBSTRING( IsNull( TMDOCU_PROV.CO_IMP1, '0'), 1, 2), 'IR' ) ) +              
  (  TMDOCU_PROV.IM_IMP2 * PATINDEX( SUBSTRING( IsNull( TMDOCU_PROV.CO_IMP2, '0'), 1, 2), 'IR' ) ) +              
  (  TMDOCU_PROV.IM_IMP3 * PATINDEX( SUBSTRING( IsNull( TMDOCU_PROV.CO_IMP3, '0'), 1, 2), 'IR' ) ) ),               
  @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2)  
ELSE 0.00
END As IR_CUAR_CATE,             
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN                 
  Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,              
  (( TMDOCU_PROV.IM_IMP1 * PATINDEX( SUBSTRING( IsNull( TMDOCU_PROV.CO_IMP1, '0'), 1, 3), 'IES' ) ) +              
  (  TMDOCU_PROV.IM_IMP2 * PATINDEX( SUBSTRING( IsNull( TMDOCU_PROV.CO_IMP2, '0'), 1, 3), 'IES' ) ) +              
  (  TMDOCU_PROV.IM_IMP3 * PATINDEX( SUBSTRING( IsNull( TMDOCU_PROV.CO_IMP3, '0'), 1, 3), 'IES' ) ) ),               
  @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2)            
ELSE 0.00
END As IM_IESS,    
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN               
  Round(OFITESO.dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI, TMDOCU_PROV.FE_EMIS,              
  TMDOCU_PROV.IM_TOTA,               
  @VSTI_CAMB, @VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR, TMDOCU_PROV.FA_TIPO_CAMB), 2)         
ELSE 0.00
END As IM_TOTA,                     
  TMDOCU_PROV.FA_TIPO_CAMB, TMDOCU_PROV.FA_CAMB_EXTR,               
  TMDOCU_PROV.CO_IMP1, TMDOCU_PROV.PC_IMP1,              
  TMDOCU_PROV.CO_IMP2, TMDOCU_PROV.PC_IMP2,              
  TMDOCU_PROV.CO_IMP3, TMDOCU_PROV.PC_IMP3,              
               
  T3.ST_SIGN As SIGNO,              
               
  TMDOCU_PROV.CO_ESTA_DOCU As ESTADO,              
  T5.CO_SUNA, TMDOCU_PROV.NU_DOCU_ORIG, TMDOCU_PROV.FE_DOCU_ORIG,               
  TMDOCU_PROV.NU_DEPO_DETR As COMPROBANTE, TMDOCU_PROV.FE_DEPO_DETR As FE_DEPO_DETRACCION,               
  TMDOCU_PROV.NU_COMP_SERV,    
            
  DBO.FU_RETE_FLAG( TMDOCU_PROV.CO_EMPR, T2.ST_RETE, T2.ST_BCON, T3.ST_RETE,  TMDOCU_PROV.FE_EMIS,  @VNIM_MAXI_NRET, 
TMDOCU_PROV.IM_IMP1, T3.ST_DOCU_0004,              
  dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI,TMDOCU_PROV.FE_EMIS, TMDOCU_PROV.IM_TOTA, @VSTI_CAMB, 
@VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR,              
  TMDOCU_PROV.FA_TIPO_CAMB))  'RETENCION' ,           
   (CASE              
  When  TMDOCU_PROV.CO_TIPO_DOCU IN (Select TI_DOCU_PROV From #TWTIPO_DOCU) THEN              
  DBO.FU_FECH_PAGO( @ISCO_EMPR, TMDOCU_PROV.CO_PROV,  TMDOCU_PROV.CO_TIPO_DOCU, TMDOCU_PROV.NU_DOCU_PROV, TMDOCU_PROV.FE_VENC 
)              
  Else              
  NULL              
   END) 'FE_VENC' , T3.NO_DOCU      
 From  TMDOCU_PROV            
 Left Outer join TTDOCU_CNTB T5            
 On TMDOCU_PROV.TI_DOCU_ORIG = T5.TI_DOCU, TMAUXI_EMPR T2, TTDOCU_CNTB T3              
 Where  TMDOCU_PROV.CO_EMPR  = @ISCO_EMPR              
     And T2.CO_EMPR = TMDOCU_PROV.CO_EMPR              
     And T2.TI_AUXI_EMPR = @VSCO_TIAU_PROV              
     And T2.CO_AUXI_EMPR = TMDOCU_PROV.CO_PROV              
     And T3.TI_DOCU = TMDOCU_PROV.CO_TIPO_DOCU              
     And T3.ST_DOCU_0010 = 'S'              
     And T3.ST_REGI_COMP = 'S'              
--   And T5.TI_DOCU =* TMDOCU_PROV.TI_DOCU_ORIG              
     And Exists ( Select #TWREGI_COMP_0002.NU_CORR_COMP              
      From #TWREGI_COMP_0002              
      Where               
      #TWREGI_COMP_0002.CO_PROV = TMDOCU_PROV.CO_PROV And              
      #TWREGI_COMP_0002.CO_TIPO_DOCU = TMDOCU_PROV.CO_TIPO_DOCU And              
      #TWREGI_COMP_0002.NU_DOCU_PROV = TMDOCU_PROV.NU_DOCU_PROV              
     )              
              
 /*********** Trabajo en la Tabla Temporal calculo Col Ajustes y Tipo de Cambio **************/              
 Update #TWREGI_COMP              
 Set  FA_CAMB = Case CO_MONE              
      When @VSCO_MONE_NACI Then 1.00              
      When @VSCO_MONE_EXTR Then FA_TIPO_CAMB              
      Else FA_CAMB_EXTR              
       End,              
   IM_AJUS = Case DE_TIPO_REPO              
      When 'REG_COMPRAS' Then Case PC_IMP1 When 0.00 Then 0.00 Else ((IsNull(IG_OPER_GRAV,0) + IsNull(IG_OPSE_GRAV,0)) / 
PC_IMP1)*100.00 - IsNull(IB_BRUT_AFEC,0) End              
      When 'REG_RECxHON' Then Case When PC_IMP1 = 0.00 Or IM_IESS = 0.00 Then 0.00 Else ((IsNull(IM_IESS,0)) / 
PC_IMP1)*100.00 - IsNull(IB_SELE_CONS,0) End              
      Else 0.00              
       End,         
   CO_OPRC_CNTB= dbo.FN_COOPRC_CNTB_Q01(@ISCO_EMPR, CO_TIPO_OPER),              
   DE_OPRC  = dbo.FN_COOPRC_CNTB_Q02(@ISCO_EMPR, CO_TIPO_OPER)              
              
 /*********** Incluir Registros Eliminados  **************/              
 Select @VNNU_REGI_ELIM = Count(NU_CORR_COMP)              
 From #TWREGI_COMP_0001              
              
 If IsNull(@VNNU_REGI_ELIM, 0 ) > 0 -- Existen Regitros Eliminado y seleciono la Opcion Incluir Reg Eliminados              
  Insert Into #TWREGI_COMP              
  (DE_TIPO_REPO, CO_SUNA, FE_EMIS, NU_CORR_COMP, NU_ASTO, NU_DOCU_PROV, NU_RUCS, NO_AUXI,              
  CO_TIPO_DOCU, CO_MONE,              
  IB_BRUT_AFEC , IB_OPER_GRAV , IB_OPER_SCRF, IB_OPER_INAF ,              
  IB_SELE_CONS ,              
  IG_OPER_GRAV, IG_OPSE_GRAV , IG_OPSI_CRFI ,               
  IR_CUAR_CATE , IM_IESS ,              
  IM_TOTA,               
  FA_TIPO_CAMB, FA_CAMB_EXTR,               
  CO_IMP1, PC_IMP1,              
  CO_IMP2, PC_IMP2,              
  CO_IMP3, PC_IMP3,              
  ST_SIGN, CO_ESTA_DOCU, CO_SUNA_ORIG, NU_DOCU_ORIG,              
  FE_DOCU_ORIG, NU_DEPO_DETR, FE_DEPO_DETR, NU_COMP_SERV, FL_RETE, FE_ULTI_PAGO)              
  Select 'REG_COMPRAS', '', Null, SUBSTRING(NU_CORR_COMP, 1, 10), '', '', '', '**ANULADO**',              
    '', '',              
    0.00 , 0.00 , 0.00, 0.00 ,              
    0.00 ,              
    0.00 , 0.00 , 0.00 ,               
    0.00 , 0.00 ,              
     
 0.00 ,               
    1.00, 1.00,               
    '', 0.00,              
    '', 0.00,              
    '', 0.00,              
    'S', 'ANU', '', '',              
    Null, '', Null, '', Null, ''              
  From #TWREGI_COMP_0001              
  Where NOT EXISTS(  Select #TWREGI_COMP.NU_CORR_COMP              
                             From #TWREGI_COMP              
        Where #TWREGI_COMP.NU_CORR_COMP = #TWREGI_COMP_0001.NU_CORR_COMP)              
              
              
End  ---Fin Reporte Oficial               
Else              
Begin ---Inicio Reporte en Base a la Moneda Origen              
 Insert Into #TWREGI_COMP              
 (DE_TIPO_REPO, CO_SUNA, FE_EMIS, NU_CORR_COMP, CO_TIPO_OPER, NU_ASTO, NU_DOCU_PROV, NU_RUCS, NO_AUXI,              
 CO_TIPO_DOCU, CO_MONE,              
 IB_BRUT_AFEC , IB_OPER_GRAV , IB_OPER_SCRF, IB_OPER_INAF ,             IB_SELE_CONS ,              
 IG_OPER_GRAV, IG_OPSE_GRAV , IG_OPSI_CRFI ,               
 IR_CUAR_CATE , IM_IESS ,              
 IM_TOTA,               
 FA_TIPO_CAMB, FA_CAMB_EXTR,               
 CO_IMP1, PC_IMP1,              
 CO_IMP2, PC_IMP2,              
 CO_IMP3, PC_IMP3,              
 ST_SIGN, CO_ESTA_DOCU, CO_SUNA_ORIG, NU_DOCU_ORIG,              
 FE_DOCU_ORIG, NU_DEPO_DETR, FE_DEPO_DETR, NU_COMP_SERV, FL_RETE, FE_ULTI_PAGO, NO_DOCU)              
 Select                 
  'REG_COMPxMON' As TIPO, T3.CO_SUNA As CODIGO_SUNAT, TMDOCU_PROV.FE_EMIS As FECHA_EMISION,              
  TMDOCU_PROV.NU_CORR_COMP As CORRELATIVO, TMDOCU_PROV.CO_TIPO_OPER As CO_TIPO_OPER, TMDOCU_PROV.NU_ASTO As NRO_ASIENTO,  
TMDOCU_PROV.NU_DOCU_PROV As NUMERO_DOCUMENTO,              
  T2.NU_RUCS As RUC_PROVEEDOR, T2.NO_AUXI As NOMB_PROV,              
  TMDOCU_PROV.CO_TIPO_DOCU, TMDOCU_PROV.CO_MONE As MONE,              
  ---B1.---  
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN              
  Case T3.ST_SIGN               
   When 'S'  Then  TMDOCU_PROV.IM_BRUT_AFEC              
   Else TMDOCU_PROV.IM_BRUT_AFEC * -1               
  End 
ELSE 0.00
END As IB_BRUT_AFEC,              
  ---B2.---              
  0.00 As IB_OPER_GRAV,              
  ---B3.---        
  0.00 As IB_OPER_SCRF,              
  ---B4.--- 
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN             
  Case T3.ST_SIGN               
   When 'S'  Then  TMDOCU_PROV.IM_BRUT_INAF              
   Else TMDOCU_PROV.IM_BRUT_INAF * -1               
  End 
ELSE 0.00
END As IB_OPER_INAF,              
  ---B5.---              
  0.00 As IB_SELE_CONS,               
  ---I.1--- 
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN             
  Case               
   When T3.CO_SUNA = '91' OR T3.CO_SUNA = '99' Then               
    Case TMDOCU_PROV.CO_MONE              
     When @VSCO_MONE_EXTR Then Round( ( ( TMDOCU_PROV.IM_BRUT_INAF )* TMDOCU_PROV.FA_TIPO_CAMB ), 2 )              
     Else TMDOCU_PROV.IM_BRUT_INAF                   
    End              
   Else              
    Case T3.ST_SIGN               
     When 'S' Then IsNull(TMDOCU_PROV.IM_IMP1,0) + IsNull(TMDOCU_PROV.IM_SCF1,0)              
     Else (IsNull(TMDOCU_PROV.IM_IMP1,0) + IsNull(TMDOCU_PROV.IM_SCF1,0) )*-1              
    End              
  End  
ELSE 0.00
END As IG_OPER_GRAV,             
  ---I.2---
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN                
  Case T3.ST_SIGN               
   When 'S' Then IsNull(TMDOCU_PROV.IM_IMP2,0) + IsNull(TMDOCU_PROV.IM_SCF2,0)              
   Else (IsNull(TMDOCU_PROV.IM_IMP2,0) + IsNull(TMDOCU_PROV.IM_SCF2,0) )*-1              
  End 
ELSE 0.00
END As IG_OPSE_GRAV,               
  ---I.3---               
  0.00 As IG_OPSI_CRFI,              
               
  0.00 As IR_CUAR_CATE,              
               
  0.00 As IM_IESS,              
CASE 
WHEN TMDOCU_PROV.CO_ESTA_DOCU != 'ANU' THEN                 
  Case T3.ST_SIGN               
   When 'S' Then IsNull(TMDOCU_PROV.IM_TOTA,0)              
   Else IsNull(TMDOCU_PROV.IM_TOTA,0)*-1              
  End           
ELSE 0.00
END As IM_TOTA,                   
  TMDOCU_PROV.FA_TIPO_CAMB, TMDOCU_PROV.FA_CAMB_EXTR,               
  TMDOCU_PROV.CO_IMP1, TMDOCU_PROV.PC_IMP1,              
  TMDOCU_PROV.CO_IMP2, TMDOCU_PROV.PC_IMP2,              
  TMDOCU_PROV.CO_IMP3, TMDOCU_PROV.PC_IMP3,              
               
  T3.ST_SIGN As SIGNO,              
               
  TMDOCU_PROV.CO_ESTA_DOCU As ESTADO,  
              
  T5.CO_SUNA, TMDOCU_PROV.NU_DOCU_ORIG, TMDOCU_PROV.FE_DOCU_ORIG,               
  TMDOCU_PROV.NU_DEPO_DETR As COMPROBANTE, TMDOCU_PROV.FE_DEPO_DETR As FE_DEPO_DETRACCION,               
  TMDOCU_PROV.NU_COMP_SERV,              
  DBO.FU_RETE_FLAG( TMDOCU_PROV.CO_EMPR, T2.ST_RETE, T2.ST_BCON, T3.ST_RETE,  TMDOCU_PROV.FE_EMIS,  @VNIM_MAXI_NRET, 
TMDOCU_PROV.IM_IMP1, T3.ST_DOCU_0004,              
  dbo.FN_TCFACT_CAMB_Q02(TMDOCU_PROV.CO_MONE, @VSCO_MONE_NACI,TMDOCU_PROV.FE_EMIS, TMDOCU_PROV.IM_TOTA, @VSTI_CAMB, 
@VSTI_ORIG, 'S', @VSCO_MONE_NACI, @VSCO_MONE_EXTR,              
  TMDOCU_PROV.FA_TIPO_CAMB))  'RETENCION',            
   (CASE              
  When  TMDOCU_PROV.CO_TIPO_DOCU IN (Select TI_DOCU_PROV From #TWTIPO_DOCU) THEN              
  DBO.FU_FECH_PAGO( @ISCO_EMPR, TMDOCU_PROV.CO_PROV,  TMDOCU_PROV.CO_TIPO_DOCU, TMDOCU_PROV.NU_DOCU_PROV, TMDOCU_PROV.FE_VENC 
)              
  Else              
  NULL              
   END) 'FE_VENC' , T3.NO_DOCU      
 From  TMDOCU_PROV            
 Left Outer Join TTDOCU_CNTB T5     
 On  TMDOCU_PROV.TI_DOCU_ORIG = T5.TI_DOCU, TMAUXI_EMPR T2, TTDOCU_CNTB T3                    
 Where  TMDOCU_PROV.CO_EMPR  = @ISCO_EMPR              
     And T2.CO_EMPR = TMDOCU_PROV.CO_EMPR              
     And T2.TI_AUXI_EMPR = @VSCO_TIAU_PROV              
     And T2.CO_AUXI_EMPR = TMDOCU_PROV.CO_PROV              
     And T3.TI_DOCU = TMDOCU_PROV.CO_TIPO_DOCU              
     And T3.ST_DOCU_0010 = 'S'              
     And T3.ST_REGI_COMP = 'S'              
---- And T5.TI_DOCU =* TMDOCU_PROV.TI_DOCU_ORIG              
     And Exists ( Select #TWREGI_COMP_0002.NU_CORR_COMP              
      From #TWREGI_COMP_0002              
      Where               
      #TWREGI_COMP_0002.CO_PROV = TMDOCU_PROV.CO_PROV And              
      #TWREGI_COMP_0002.CO_TIPO_DOCU = TMDOCU_PROV.CO_TIPO_DOCU And             
      #TWREGI_COMP_0002.NU_DOCU_PROV = TMDOCU_PROV.NU_DOCU_PROV              
     )              
              
 Update #TWREGI_COMP              
 Set  FA_CAMB = Case CO_MONE              
      When @VSCO_MONE_NACI Then FA_TIPO_CAMB              
      When @VSCO_MONE_EXTR Then FA_TIPO_CAMB              
      Else FA_CAMB_EXTR              
       End,              
   IM_AJUS = Case DE_TIPO_REPO              
      When 'REG_COMPRAS' Then Case PC_IMP1 When 0.00 Then 0.00 Else ((IsNull(IG_OPER_GRAV,0) + IsNull(IG_OPSE_GRAV,0)) / 
PC_IMP1)*100.00 - IsNull(IB_BRUT_AFEC,0) End              
      When 'REG_RECxHON' Then Case When PC_IMP1 = 0.00 Or IM_IESS = 0.00 Then 0.00 Else ((IsNull(IM_IESS,0)) / 
PC_IMP1)*100.00 - IsNull(IB_SELE_CONS,0) End              
      Else 0.00              
       End              
              
              
End  ---Fin Reporte Base a la Moneda Origen              
              
              
              
RETURN              
/*---------------- Fin ----------------------------*/


GO
